import java.util.*;

import java.text.ParseException;
import java.text.SimpleDateFormat;

/*
nowcodee java 基础语法篇  51题
2024.03.15 刷至37题
*/

public class Test {

    public static void main31(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int score = scanner.nextInt();
        try {
            if(score>=0&&score<=100)
                System.out.println(score);
            else
                throw new ScoreException("分数不合法");
        }catch (ScoreException e){
            System.out.println(e.getMessage());
        }
    }

   /* 静态内部类（static inner class）：静态内部类与普通内部类不同，
    它可以独立于外部类实例化，并且在没有外部类实例的情况下创建。*/
    static class ScoreException extends Exception {
        public ScoreException(String message) {
            super(message);//输入异常信息
        }
    }

    //2021 09 08 14 38 05
    public static void main30(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //SimpleDateFormat.parse() 方法用于将字符串解析为日期对象。
        //SimpleDateFormat.format() 方法用于将日期对象格式化为字符串。
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();
        //write your code here......
        String[] arr=str1.split(" ");
        if (arr.length!=6){
            System.out.println("您输入的数据不合理");
        }else{
            String str = arr[0]+"-"+arr[1]+"-"+arr[2]+" "+arr[3]+":"+arr[4]+":"+arr[5];
            Date date = sdf.parse(str);
            System.out.println("北京时间为：" + sdf.format(date.getTime()));
            System.out.println("纽约时间为：" + sdf.format(date.getTime() - (long)12* 60 * 60 * 1000));
        }

    }

    //Calendar类的一个初步认识
    public static void main29(String[] args) {
            Scanner console = new Scanner(System.in);
            int year = console.nextInt();
            //获取Calendar的实例
            Calendar calendar=Calendar.getInstance();
            //循环遍历所有的月份
            for(int month=1;month<=12;month++){
                //设置年、月、日
                calendar.set(year,month,0);
                //输出对应年份各个月的天数
                System.out.println(year+"年"+month+"月:"+calendar.getActualMaximum(Calendar.DATE)+"天");
                //在这个示例中，calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
                // 将返回当前月份的天数，并将结果存储在 maximumDays 变量中。
            }


    }

    public static void main28(String[] args) {
        Scanner scanner=new Scanner(System.in);
        double num = scanner.nextDouble();
        //System.out.println(String.format("%.2lf",num));
        //绝对值
        System.out.println(Math.abs(num));
        //平方根
        System.out.println(Math.sqrt(num));
        //对数
        System.out.println(Math.log(num));
        //正弦
        System.out.println(Math.sin(num));
    }

    //投色子
    public static void main27(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int seed = scanner.nextInt();
            Random random = new Random(seed);//伪随机数
            System.out.println(random.nextInt(6)+1);
        }
    }

    //打印一个数的不同进制
    public static void main26(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        //方法一 ：Integer.toBinaryString(num)
        // 将数字转换成字符串
        //Integer.toString(num);
        // 将数字转换成二进制
        //Integer.toBinaryString(num);
        // 将数字转换成八进制
        //Integer.toHexString(num);
        // 将数字转换成十六进制
        //Integer.toOctalString(num);
        System.out.println(Integer.toBinaryString(num));

        //方法二 Integer.toString(num, 2)
        System.out.println(Integer.toString(num,16));

        //方法三 手动实现
        //fun(num);

        //额外补充 ：适用于8进制和16进制但不适用于二进制方法
        // %d表示将整数格式化为10进制整数
        System.out.printf("%d", num);
        System.out.println();
        // %o表示将整数格式化为8进制整数
        System.out.printf("%o", num);
        System.out.println();
        // %x表示将整数格式化为16进制整数
        System.out.printf("%x", num);
        System.out.println();
        // %X表示将整数格式化为16进制整数，并且字母变成大写形式
        System.out.printf("%X", num);
        System.out.println();

    }

    /*public static void fun(int tar) {
        int temb = tar / 2;
        int temp = tar % 2;
        if(temb >= 1){
            fun(temb);
        }
        System.out.print(temp);
    }*/

    public static void main25(String[] args) {//
        String string = "H e l l o ! n o w c o d e r";
        Scanner scanner= new Scanner(System.in);
        String word = scanner.next();
        scanner.close();
        System.out.println(check(string, word));
    }

    public static int check(String str, String word) {
        return str.length()-str.replace(word,"").length();
        //原字符串长度-删去目标的字符串长度
    }


    public static void main24(String[] args) {//37ms  10960kb
        String string = "H e l l o ! n o w c o d e r";
        Scanner scanner= new Scanner(System.in);
        String word = scanner.next();
        scanner.close();
        System.out.println(check(string, word));
    }

    /*public static int check(String str, String word) {
        int count=0;
        char word1=word.charAt(0);
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i)==word1){
                count++;
            }
        }
        return count;
    }*/

    //将一个由英文字母组成的字符串转换成从末尾开始每三个字母用逗号分隔的形式。
    //mian22为我当时做的的方法很繁琐
    public static void main23(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        StringBuilder newstr = new StringBuilder(str); //用原字符串创建可改变的字符串
        for(int i = str.length() - 3; i >= 0; i -= 3){ //从末尾开始，三个三个遍历
            newstr.insert(i, ','); //插入逗号
        }
        System.out.println(newstr.toString()); //转变成String类输出
    }

//很繁琐逻辑有问题不推荐
    public static void main22(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.next();
        StringBuilder stb =new StringBuilder(str);
        stb=stb.reverse();
        int len=stb.length()/3;
        int count=3;
        for (int i = 0;  i<len; i++) {
            stb.insert(count,",");
            count+=4;
        }
        stb=stb.reverse();
        str=stb.toString();
        System.out.println(str);
    }
   /* public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String className = scanner.next();
            // print就是需要你定义的方法
            print(Class.forName(className).newInstance());
        }
    }
    // 多态性，是子类的对象赋给了父类的引用，使用的前提是有继承关系、有方法的重写
    // 本题中的三个类都重写了toString()方法
    // 那么很显然，需要找到一个类，是本题中三个类的共同父类，又有toString()方法
    // 并且有forName()方法和newInstance()方法，以便在第10行的print()中能传入一个对象
    // 不用想了，平时就是用 Object类，它是所有类的父类，又拥有各种各样的方法
    // 找到该类以后，把这个类的对象作为参数传给print()，也就是“父类的引用”，
    // 并且在方法体中应用上三个子类都重写了的方法来实现需求
    // 这样，在Class.forName(className).newInstance()时，
    // 就会帮助创建出“子类的对象”
    // 从而实现“父类的引用指向子类的对象”，即多态性
    public static void print(Object obj){
        System.out.println(obj.toString());
    }
}

class First {
    public String toString() {
        return "First";
    }
}

class Second {
    public String toString() {
        return "Second";
    }
}

class Third {
    public String toString() {
        return "Third";
    }
*/

   /* class Person {

        private int age;

        public void setAge(int age) {
            this.age = age;
        }

        public int getAge() {
            if (age<0){
                return 0;
            }else if (age>200){
                return 200;
            }
            return age;
        }

    }*/

    //二维数组
    public static void main21(String[] args) {
        int[][]  arr = {{11,33,55},{22,44,66,88},{131,214,315,146},{928,827,726,625},{424,525}};
        int sum=add(arr);
        System.out.println(sum);
    }

    public static int add(int[][] arr) {
        int sum=0;
        for(int[] x:arr){
            for (int y: x){
                sum+=y;
            }
        }
        //着重注意这里for循环的嵌套
        return sum;
    }

    public static void main20(String[] args) {
        int[] arr = new int[6];
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        }
        System.out.println(Arrays.toString(arr));
        int left=0;
        int right= arr.length-1;
        while (left<right) {
            int temp=arr[left];
            arr[left]=arr[right];
            arr[right]=temp;
            left++;
            right--;
        }
        System.out.println(Arrays.toString(arr));
    }

    //求一个数组中的最大值，最小值 巧方法main19
    public static void main19(String[] args) {
        int[] ary = new int[6];
        int max;
        int min;
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i <ary.length ; i++) {
            ary[i]=scanner.nextInt();
        }
        Arrays.sort(ary);
        max=ary[5] ;
        min=ary[0];
        System.out.println(max+" "+min);
    }

    public static void main18(String[] args) {
        int[] ary = new int[6];
        int max = 0;
        int min = 0;
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i <ary.length ; i++) {
            ary[i]=scanner.nextInt();
        }
        min=ary[0];
        for (int i = 0; i <ary.length ; i++) {
            if (ary[i]>max){
                max=ary[i];
            }
            if (ary[i]<min){
                min=ary[i];
            }
        }
        System.out.println(max+" "+min);
    }

    //计算位数 常规方法如main16 巧方法如main17
    public static void main17(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        scan.close();
        if (num<=0){
            System.out.println(num);
        }else System.out.println((num+"").length());
        //利用字符串的length()方法可以很容易地得到位数，
        // 其次我们使用 +"" 的技巧可以很容易地将整数转换为字符串
    }

    public static void main16(String[] args) {
        Scanner scan = new Scanner(System.in);
        int num = scan.nextInt();
        scan.close();
        int count=1;
        if (num<=0){
            System.out.println(num);
        }else{
            while(num>10){
                num/=10;
                count++;
            }
            System.out.println(count);
        }
    }

    public static void main15(String[] args) {
        Test test=new Test();
        Scanner scan = new Scanner(System.in);
        int number = scan.nextInt();
        System.out.println(test.isPrimeNumber(number));
    }

    public Boolean isPrimeNumber(int number) {
        if(number==1||number==2){
            return true;
        }else{
            for (int i = 2; i*i < number; i++) {
                if (number%i==0){
                    return false;
                }
            }
            return true;
        }
    }

    public static void main14(String[] args) {
        Scanner sc = new Scanner(System.in);
        double count=0;
        int sum =0;
        int num=0;
        while(sc.hasNextInt()){
            num=sc.nextInt();
            if (num<0){
                break;
            }
            sum+=num;
            count++;
        }
        double avg=sum/count;
        System.out.println(String.format("%.2f",avg));
    }

    /*一球从h米高度自由落下，每次落地后反弹回原高度的一半再落下，
    求它在第n次落地时共经过了多少米？第n次反弹多高？*/
    public static void main13(String[] args) {
        Scanner scanner=new Scanner(System.in);
        float h=scanner.nextFloat();
        int n =scanner.nextInt();
        float sum=h;
        for (int i = 0; i < n-1; i++) {
            h*=0.5;
            sum+=h*2;
        }
        h*=0.5;
        System.out.println(String.format("%.3f", h)+" "+String.format("%.3f", sum));
    }

    //求最小公倍数
    public static void main12(String[] args) {
        Scanner console = new Scanner(System.in);
        int m = console.nextInt();
        int n = console.nextInt();
        int result = getCM(m, n);
        System.out.println(result);
    }

    public static int getCM(int m, int n){
        int max=Math.max(m,n);
        for (int i = max; i <=m*n ; i++) {
            if (i%m==0&&i%n==0){
                return i;
            }
        }
        return -1;//返回-1，说明没找到，基本不会出现这个问题
    }

    public static void main11(String[] args) {
        int count = 0;
        Scanner sc = new Scanner(System.in);
        while(sc.nextInt()>0){
            count++;
        }
        System.out.println(count);
    }

    public static void main10(String[] args) {
        long res = 0;
        long num = 9;
        for (int i = 0; i < 10; i++) {
            res+=num;
            num=num*10+9;
        }
        System.out.println(res);
    }

   /* 请根据给出的正则表达式来验证邮箱格式是否合法，
    如果用户输入的格式合法则输出「邮箱格式合法」，否则输出「邮箱格式不合法」。
    测试用例 123123@nowcoder.com
    */
    //此处涉及到了String的一种新方法 s.matches 匹配正则表达式
   public static void main9(String[] args) {
       Scanner scanner = new Scanner(System.in);
       String str = scanner.next();
       String emailMatcher="[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z0-9]+";
       String res=str.matches(emailMatcher)?"邮箱格式合法":"邮箱格式不合法";
       System.out.println(res);
   }

    public static void main8(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String grade =scanner.next();
        String res =grade.equals("A")?"优秀":grade.equals("B")
                ?"良好":grade.equals("C")
                ?"及格":grade.equals("D")
                ?"不及格":"未知等级";
        System.out.println(res);
    }


    /*体重指数 = 体重 (kg) / ( 身高 (m) × 身高 (m) )，
    小于18.5属于偏瘦，介于18.5和20.9之间（左闭右开）属于苗条，
    介于20.9和24.9之间（左闭右闭）属于适中，
    超过24.9属于偏胖。下面由你来编写一段逻辑，
    算出输入了身高和体重的用户的体重指数，并返回他们的身材状态。(体重指数请使用double类型)*/
    public static void main7(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double height = scanner.nextDouble();
        double weight = scanner.nextDouble();
        double MBI=(weight/(height*height));
        String res=MBI<18.5?"偏瘦":MBI<20.9
                ?"苗条":MBI<24.9
                ?"适中":"偏胖";
        System.out.println(res);
    }

    /*
    满100全额打9折；
    满500全额打8折；
    满2000全额打7折；
    满5000全额打6折；
    我的方法多个if 嵌套
    最优方法 使用三目运算符的嵌套
    */
    public static void main6(String[] args) {
        Scanner console = new Scanner(System.in);
        int price = console.nextInt();
        int cost = 0;
        //考虑到购买5000元东西的人很少，应从小到大判断，以减少判断次数
        cost=(int)(price<100 ? price : price<500
                ? price*0.9 : price<2000
                ? price*0.8 : price<5000
                ? price*0.7 : price*0.6);
        System.out.println(cost);
    }

    public static void main5(String[] args) {
        Scanner console = new Scanner(System.in);
        int price = console.nextInt();
        int cost = 0;
        if (price<100){
            cost=price;
        }else if(price>=100&&price<500){
            cost = price*9/10;
        }else if(price>=500&&price<2000){
            cost = price*8/10;
        }else if(price>=2000&&price<5000){
            cost = price*7/10;
        }else if(price>=5000){
            cost = price*6/10;
        }
        System.out.println(cost);
    }

    //两个数字的交换可以用以下方式 非常巧妙
    public static void main4(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        a = a+b-(b=a);
        System.out.println(a+" "+b);
    }

    /*
    JAVA3 四舍五入定义一个int类型变量i,i为由浮点数变量d四舍五入后的整数类型，请将转换后的i进行输出
    我自己的方法为循规蹈矩的if判断，见main2 运行时间 42ms 占用内存 11908KB
    最优解答如main3
    */
    public static void main3(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double d= scanner.nextDouble();
        int i=(int)(d+0.5);
        System.out.println(i);
    }

    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double d= scanner.nextDouble();
        int i=(int)d;
        d*=10;
        d%=10;
        if(d>=5){
            System.out.println(i+1);
        }else{
            System.out.println(i);
        }
    }

    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        scanner.close();
        if(a>=b){
            System.out.print(a+b+" ");
            System.out.print(a-b+" ");
            System.out.print(a*b+" ");
            System.out.print(a/b+" ");
            System.out.print(a%b+" ");
        }else{
            System.out.print(a+b+" ");
            System.out.print(b-a+" ");
            System.out.print(a*b+" ");
            System.out.print(b/a+" ");
            System.out.print(b%a+" ");
        }
    }
}
